package de.lukasniemeier.mensa;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.util.Pair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.util.ArrayList;
import java.util.List;
import de.lukasniemeier.mensa.model.Mensa;
import de.lukasniemeier.mensa.model.WeeklyMenu;
import de.lukasniemeier.mensa.parser.WeeklyMenuParseException;
import de.lukasniemeier.mensa.parser.WeeklyMenuParser;
import de.lukasniemeier.mensa.utils.Utils;
/**
* Created on 17.09.13.
*/
public class WeeklyMenuTask extends AsyncTask<String, Integer, Pair<WeeklyMenu, Exception>> {
public interface WeeklyMenuReceiver {
void onWeeklyMenuSuccess(WeeklyMenu weeklyMenu);
void onWeeklyMenuError(Exception error);
}
private final Context context;
private final WeeklyMenuReceiver receiver;
private final Mensa mensa;
public WeeklyMenuTask(Mensa mensa, Context context, WeeklyMenuReceiver receiver) {
this.context = context;
this.receiver = receiver;
this.mensa = mensa;
}
@Override
protected Pair<WeeklyMenu, Exception> doInBackground(String... urls) {
List<WeeklyMenu> menus = new ArrayList<WeeklyMenu>();
for (String url : urls) {
try {
Document document = Jsoup.connect(url).get();
WeeklyMenuParser parser = WeeklyMenuParser.create(context, document, mensa);
menus.add(parser.parse());
} catch (WeeklyMenuParseException wmpe) {
Log.w(TAG, String.format(context.getString(R.string.error_menu_parse), url), wmpe);
return new Pair<WeeklyMenu, Exception>(null, wmpe);
} catch (Exception e) {
Log.e(TAG, String.format(context.getString(R.string.error_menu_download), url), e);
return new Pair<WeeklyMenu, Exception>(null, e);
}
}
return new Pair<WeeklyMenu, Exception>(WeeklyMenu.merge(mensa, Utils.now(), menus), null);
}
@Override
protected void onPostExecute(Pair<WeeklyMenu, Exception> result) {
if (result.first == null) {
receiver.onWeeklyMenuError(result.second);
} else {
receiver.onWeeklyMenuSuccess(result.first);
}
}
private static final String TAG = WeeklyMenuTask.class.getSimpleName();
}